Python推荐算法案例(2)

您所在的位置:网站首页 python 推荐 Python推荐算法案例(2)

Python推荐算法案例(2)

2023-07-21 03:53| 来源: 网络整理| 查看: 265

    在上一节中讲述了如何利用评分对电影进行简单的排序推荐。Python推荐算法案例(1)——根据评分进行排序的电影推荐

    本节中,将根据某电影的内容属性(例如电影类别)来推荐相似的电影。

   数据来源IMDB电影评分数据

    Python程序如下:

import pandas as pd from numpy import * movies=pd.io.parsers.read_csv('C:/Users/Ray/Desktop/recommand/movie_metadata/movie_metadata.csv') movies.head()

movies['genres'].head()

from sklearn.feature_extraction.text import TfidfVectorizer

    tf-idf(英语:term frequency–inverse document frequency)是一种用于信息检索与文本挖掘的常用加权技术。tf-idf是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。tf-idf加权的各种形式常被搜索引擎应用,作为文件与用户查询之间相关程度的度量或评级。

    在一份给定的文件里,词频(term frequency,tf)指的是某一个给定的词语在该文件中出现的频率。这个数字是对词数(term count)的归一化,以防止它偏向长的文件。(同一个词语在长文件里可能会比短文件有更高的词数,而不管该词语重要与否。)对于在某一特定文件里的词语ti来说,它的重要性可表示为:

    以上式子中ni,j是该词在文件dj中的出现次数,而分母则是在文件dj中所有字词的出现次数之和。

    逆向文件频率(inverse document frequency,idf)是一个词语普遍重要性的度量。某一特定词语的idf,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取以10为底的对数得到:

    某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的tf-idf。因此,tf-idf倾向于过滤掉常见的词语,保留重要的词语。

    本例中直接使用sklearn库中的TfIdfVectorizer来计算TF-IDF矩阵。

tfidf=TfidfVectorizer(stop_words='english') movies['genres']=movies['genres'].fillna('') tfidf_matrix=tfidf.fit_transform(movies['genres']) tfidf_matrix.shape (5043, 29)

    根据结果可知,一共有29个电影类别。

    接着利用余弦距离来计算两个电影之间的相关性。这里使用linear_kernel(),而不是cosine_similarities(),是因为我么已经得到了TF-IDF矢量,直接使用linear_kernel()计算点积就可以得到余弦距离,减少计算时间。

from sklearn.metrics.pairwise import linear_kernel cosine_sim=linear_kernel(tfidf_matrix,tfidf_matrix)

    使用panda.Series()为电影列表建立索引,方便后面将电影与电影序号进行相互索引。下文代码中的enumerate用途一样。

indices=pd.Series(movies.index,index=movies['movie_title']).drop_duplicates() def get_recommendation(title,consine_sim=cosine_sim): idx=indices[title] sim_scores=list(enumerate(cosine_sim[idx])) sim_scores=sorted(sim_scores,key=lambda x:x[1],reverse=True) sim_scores=sim_scores[1:11] movie_indices=[i[0]for i in sim_scores] return movies['movie_title'].iloc[movie_indices] get_recommendation('Avatar')

    在本例中,是计算得到与阿凡达相似的电影,根据结果,推荐的相关电影都属于科幻片,如钢铁侠、星球大战、蜘蛛侠、天降奇兵、超时空圣战。如果想得到更好的结果,可以考虑更多的内容属性(item profile)(推荐系统相关概念介绍参见推荐系统)。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3